package Terminal.TechnicalServices.Mapper;

import java.text.Format;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;

import Terminal.Entity.Dominio.EManager;
import Terminal.Entity.Dominio.EMoney;
import Terminal.Entity.Dominio.ESottoprogetto;
import Terminal.Entity.Dominio.ETask;
import Terminal.Entity.IceClasses.EManagerI;
import Terminal.Entity.IceClasses.EMoneyI;
import Terminal.Entity.IceClasses.ESottoprogettoI;
import Terminal.Entity.IceClasses.ETaskI;

public class MSottoprogetto implements Mapper{

	@Override
	public ESottoprogettoI getIceObj(Object hibObj) {
		
		ESottoprogettoI icesottoprogetto = null;
		
		if(hibObj instanceof ESottoprogetto)
		{	
			
			icesottoprogetto = new ESottoprogettoI();
		
			/////////////////mapper di appoggio///////////
			MManager managermapper= new MManager();
			MMoney moneymapper = new MMoney();
			MTask taskmapper = new MTask();
			
			////////////////////veriabili per mapper di appoggio/////////////
			EManagerI manager = managermapper.getIceObj(((ESottoprogetto) hibObj).getManager());
			EMoneyI costo = moneymapper.getIceObj(((ESottoprogetto) hibObj).getCosto());
			EMoneyI budget = moneymapper.getIceObj(((ESottoprogetto) hibObj).getBudget());
			
			///////////////variabili di appoggio//////////////////
//			Format format = icesottoprogetto.getDateFormat();
			//List<ETaskI> tasksice = new ArrayList<ETaskI>();
			java.util.List<ETask> taskhib = ((ESottoprogetto) hibObj).getTasks();
		
			icesottoprogetto.tasks = new ArrayList<EntityCondivise.ETask>();
		
			icesottoprogetto.id=((ESottoprogetto) hibObj).getId();
			icesottoprogetto.nome=((ESottoprogetto) hibObj).getNome();
			icesottoprogetto.manager = manager;
			icesottoprogetto.inizio= ((ESottoprogetto) hibObj).getInizio();
			icesottoprogetto.scadenza= ((ESottoprogetto) hibObj).getScadenza();
			icesottoprogetto.costo = costo;
			icesottoprogetto.budget = budget;
			
			for (ETask eTask : taskhib) {
				icesottoprogetto.tasks.add(taskmapper.getIceObj(eTask));
			}
			
		}
		
		return icesottoprogetto;
	}

	@Override
	public ESottoprogetto getHibObj(Object iceObj) {
ESottoprogetto hibsottoprogetto = null;
		
		if( iceObj instanceof ESottoprogettoI){
			
			hibsottoprogetto = new ESottoprogetto();
			
			//////////////////mapper//////////////
			MManager managermapper= new MManager();
			MTask taskmapper = new MTask();
			MMoney moneymapper = new MMoney();
			
			///////////////variabili//////////////
			EManager manager = managermapper.getHibObj(((ESottoprogettoI) iceObj).manager);
			EMoney budgettemp = moneymapper.getHibObj(((ESottoprogettoI) iceObj).budget);
			Format format = ((ESottoprogettoI) iceObj).getDateFormat();
			ArrayList<ETask> taskshib=new ArrayList<ETask>();
			
			hibsottoprogetto.setId(((ESottoprogettoI) iceObj).id);
			hibsottoprogetto.setNome(((ESottoprogettoI) iceObj).nome);
			hibsottoprogetto.setManager(manager);
			try {
				hibsottoprogetto.setDataInizio((Date) format.parseObject((((ESottoprogettoI) iceObj).inizio)));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				hibsottoprogetto.setDataInizio(null);
			}
			try {
				hibsottoprogetto.setDataScadenza(((Date) format.parseObject((((ESottoprogettoI) iceObj).scadenza))));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				hibsottoprogetto.setDataScadenza(null);
			}
			
			for (EntityCondivise.ETask eTask : ((ESottoprogettoI) iceObj).tasks) {
				taskshib.add(taskmapper.getHibObj((ETaskI)eTask));
			}
			hibsottoprogetto.setInizio( ((ESottoprogettoI) iceObj).inizio );
			hibsottoprogetto.setScadenza( ((ESottoprogettoI) iceObj).scadenza );			
			hibsottoprogetto.setBudget( moneymapper.getHibObj(((ESottoprogettoI) iceObj).budget));
			hibsottoprogetto.setTasks(taskshib);
			hibsottoprogetto.setBudget(budgettemp);
			
			hibsottoprogetto.calcolaCosto();
		}
		
		return hibsottoprogetto;
	}

}
